﻿using System;
using System.Collections.Generic;
using System.Collections;
using NHibernate.Cfg;
using NHibernate;

namespace Model {

    
    public class Cidade {

    private string idCidade;
    private string nome;    

    public string IdCidade {
      get { return idCidade; }
      set { idCidade = value; }
    }

    public string Nome {
      get { return nome; }
      set { nome = value; }
    }

    public Cidade()
    {
    }

    public Cidade(string pIdCidade, string pNome)
    {
        this.IdCidade = pIdCidade;
        this.Nome = pNome;
    }


    #region Metodos

    #region Persist
    public Boolean Persist()
    {
        ISession objSession = ConnectionFactory.getConnection().OpenSession();
        ITransaction objTransaction = objSession.BeginTransaction();

        try
        {
            objSession.Save(this);
            objTransaction.Commit();
            objSession.Close();
            return true;
        }
        catch (Exception ex)
        {
            objTransaction.Rollback();
            objSession.Close();
            throw ex;
        }
    }
    #endregion

    #region Update
    public Boolean Update()
    {
        ISession objSession = ConnectionFactory.getConnection().OpenSession();
        ITransaction objTransaction = objSession.BeginTransaction();

        try
        {
            objSession.Update(this);
            objTransaction.Commit();
            objSession.Close();
            return true;
        }
        catch (Exception ex)
        {
            objTransaction.Rollback();
            objSession.Close();
            throw ex;
        }
    }
    #endregion

    #region Delete
    public static Boolean Delete(int pIdCidade)
    {
        Cidade objCidade = null;
        ISession objSession = ConnectionFactory.getConnection().OpenSession();
        ITransaction objTransaction = objSession.BeginTransaction();

        try
        {
            objCidade = (Cidade)objSession.Load(typeof(Model.Cidade), pIdCidade);
            objSession.Delete(objCidade);
            objTransaction.Commit();
            objSession.Close();
            return true;
        }
        catch (Exception ex)
        {
            objTransaction.Rollback();
            objSession.Close();
            throw ex;
        }
    }
    #endregion

    #region RetriveObject
    public static Cidade RetriveObject(string pIdCidade)
    {
        Cidade objCidade = null;
        ISession objSession = ConnectionFactory.getConnection().OpenSession();
        ITransaction objTransaction = objSession.BeginTransaction();

        try
        {
            objCidade = (Cidade)objSession.Load(typeof(Model.Cidade), pIdCidade);
            objSession.Close();
        }
        catch (Exception ex)
        {
            objTransaction.Rollback();
            objSession.Close();
            throw ex;
        }
        return objCidade;
    }
    #endregion

    #region RetriveObjects
    public static IList RetriveObjects()
    {
        IList listCidade;
        ISession objSession = ConnectionFactory.getConnection().OpenSession();
        ITransaction objTransaction = objSession.BeginTransaction();

        try
        {
            listCidade = objSession.CreateCriteria(typeof(Model.Cidade)).List();
            
            objSession.Close();

        }
        catch (Exception ex)
        {
            listCidade = null;
            objTransaction.Rollback();
            throw ex;
        }
        return listCidade;
    }
    #endregion

    #endregion
  }
}
